package com.class05.controller;

import com.class05.pojo.User;
import org.springframework.validation.BindingResult;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;

import java.util.HashMap;
import java.util.Map;

/**
 * @ClassDescription: 测试声明式异常在springmvc框架中如何处理
 * @JdkVersion: 17
 * @Author: yxy
 * @Created: 2023/12/12 9:12
 */
@RestController//@Controller+@ResponseBody
@RequestMapping("user")
public class UserController {
    /**
     * 接受用户数据，用户有效验注解
     * 步骤1：实体类属性添加效验注解
     * 步骤2：handler(@Validated 实体类对象)
     * 细节：param  | json 校验注解都有效果
     * json参数  @RequestBody
     * 如果，不符合校验规则，直接向前段抛出异常！
     * 接受错误绑定信息！自定义返回结果！
     * 约定： 参数错误  -》｛code：400｝-》前段
     * 捕捉错误绑定错误信息：
     * 1.handler（校验对象，BindingResult result）要求：
     * todo BindingResult 必须紧挨着 校验对象
     * 2.BindingResult 获取绑定错误
     */
    @PostMapping("register")
    public Object register(@Validated @RequestBody User user,
                           BindingResult result) {

        if (result.hasErrors()) {
//            绑定错误，就不直接返回了，由我们自己决定
            Map data = new HashMap();
            data.put("code", 400);
            data.put("msg", "参数效验异常了！");
            return data;

        }
        System.out.println("user = " + user);
        return user;

    }

    @GetMapping("data")
    public String data() {
        String str = null;
        String s = str.toLowerCase();
//        java.lang.NullPointerException
        System.out.println("s = " + s);
        return "ok";

    }

    @GetMapping("data1")
    public String data1() {
        int i = 1 / 0; //除零异常  ArithmeticException
        return "ok";
    }
}
